package com.zyf.wjy.service;

import com.zyf.wjy.dao.NewsDao;
import com.zyf.wjy.entity.News;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 新闻公告服务类
 */
@Service
public class NewsService {
    
    @Autowired
    private NewsDao newsDao;
    
    /**
     * 查询所有新闻
     */
    public List<News> findAll() {
        return newsDao.findAll();
    }
    
    /**
     * 根据ID查询
     */
    public News findById(Long id) {
        return newsDao.findById(id);
    }
    
    /**
     * 根据类型查询
     */
    public List<News> findByType(String type) {
        return newsDao.findByType(type);
    }
    
    /**
     * 查询已发布的新闻
     */
    public List<News> findPublished() {
        return newsDao.findPublished();
    }
    
    /**
     * 查询置顶新闻
     */
    public List<News> findTopNews() {
        return newsDao.findTopNews();
    }
    
    /**
     * 批量保存新闻
     */
    public List<News> saveAll(List<News> newsList) {
        return newsList.stream()
            .map(this::save)
            .toList();
    }
    
    /**
     * 保存新闻
     */
    public News save(News news) {
        if (news.getId() == null) {
            news.setCreateTime(LocalDateTime.now());
            news.setViewCount(0);
            news.setStatus(0); // 默认草稿
            news.setIsTop(0); // 默认不置顶
        }
        news.setUpdateTime(LocalDateTime.now());
        return newsDao.save(news);
    }
    
    /**
     * 发布新闻
     */
    public void publish(Long newsId) {
        News news = newsDao.findById(newsId);
        if (news != null) {
            news.setStatus(1);
            news.setPublishTime(LocalDateTime.now());
            newsDao.save(news);
        }
    }
    
    /**
     * 删除新闻
     */
    public boolean deleteById(Long id) {
        return newsDao.deleteById(id);
    }
    
    /**
     * 增加浏览次数
     */
    public void increaseViewCount(Long newsId) {
        News news = newsDao.findById(newsId);
        if (news != null) {
            news.setViewCount(news.getViewCount() + 1);
            newsDao.save(news);
        }
    }
}

